home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_03 / letters / fixmilam.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-07  |  1.2 KB  |  56 lines

  1. static int is_it_a_ieap_year( unsigned year ){
  2.  
  3.  
  4. if (year > 1582)
  5.      return ((year % 4 == 0 && year % 100 != 0)
  6.          || year % 400 = 0);
  7.   else return year % 4 = 0;
  8. }
  9.  
  10.  
  11. static date_t years to_days( unsigned year) {
  12.  
  13.  
  14. date_t rv;
  15.  
  16.  
  17. if (year > 0) year--,
  18.   rv = year * 365L + year / 4L;
  19.   if(year>= 1582)rv+=year/400L-year/ 100L+ 12;
  20.   return rv;
  21. }
  22. date_t time_to_date( time_t tv )
  23.  
  24.  
  25. date_t rv;
  26.   struct tm *tm;
  27.   int year, leap_year;
  28.  
  29.  
  30.   /*********************************************/
  31.   /* Get a time structure to use for conversion process. */
  32.   /*********************************************/
  33.  
  34.  
  35.   tm = localtime(&tv);
  36.  
  37.  
  38.   /*********************************************/
  39.   /* Use values in the tm structure to convert the current */
  40.   /* date into a long integer value.      */
  41.   /*********************************************/
  42.  
  43.  
  44.   year = tm -> tm_year + 1900;
  45.   leap_year = is_it_a_leap_year(year);
  46.   rv = years_to_days( year );
  47.   rv += months_to_days(tm -> tm_mon + 1, leap_year );
  48.   rv += tm->tm_mday;
  49.   if((year> 1582) || ((year== 1582)&&
  50.       ((tm->tm_mon > 10) 11 ((tm->tm_mon = 10)
  51.         && (tm->tm_mday > 14))
  52.       rv-= 10;
  53.   return rv - 1;
  54.  
  55.